<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button>点击1</button>
    <button>点击2</button>
    <button>点击3</button>

    <script>
        // let arr=[1,2,3]

        // console.dir(arr)

        // call apply bind 共同点  都可以改变this的指向

        function fn(){
            console.log(this);
        }

        //第一种场景

        window.fn()  //一般window 被省略了 指向Window

        //第二种场景

        let obj={
            name:'zs',
            age:20,
            say:function(){
                console.log(this);
            }
        }

        obj.say() // 对象里面的函数一般叫方法  方法被调用一般指向当前调用的这个对象


          //第三种场景 
          var btns = document.querySelectorAll('button')
          for(let i = 0;i<btns.length;i++) {
              btns[i].onclick = function(){
                  console.log(i);
                  console.log(this); // 当前谁触发的这个函数的事件源
              }
          }

    //this 只能调用的时候有关  不是定义的时候

    // function fn() {
    //     console.log(this);
    // }

    //第四种场景 自调用函数 this 指向 window 
    (function fn2(){
        alert(1)
        console.log(this);
    }
    ) ()

    // 第五种场景    回调函数的this 指向window 

    function fn3(callback) {
        alert(2)
        callback && callback()
    }

    function fn4(){
        console.log(this);
    }
    fn3(fn4)



    </script>
</body>
</html>